#!/bin/bash
# 用途：XRK-Yunzai 项目安装修复脚本（多人共用版）
# 核心功能：Git配置初始化+node_modules冲突修复+.gitignore配置+依赖重装+远程代码同步
# 无任何Git提交/推送操作，纯安装部署场景适用
set -euo pipefail  # 脚本执行出错立即退出，避免无效操作扩散

# ===================== 基础配置（可根据实际部署路径修改） =====================
PROJECT_DIR="/root/XRK-Yunzai"  # 项目部署根目录，其他人使用可调整路径
CONFIG_FILE="$PROJECT_DIR/.git/config"
GIT_IGNORE_FILE="$PROJECT_DIR/.gitignore"
REMOTE_REPO="https://gitcode.com/fengyunnb_admin/XRK-Yunzai.git"  # 远程仓库地址（固定你的仓库）
MAIN_BRANCH="master"  # 主分支，与远程保持一致

# ===================== 1. 前置检查与目录初始化 =====================
echo -e "\n[1/7] 开始执行 XRK-Yunzai 安装修复脚本..."
echo "项目部署目录：$PROJECT_DIR"
echo "远程仓库地址：$REMOTE_REPO"

# 1.1 检查并创建项目目录（确保目录存在）
if [ ! -d "$PROJECT_DIR" ]; then
    echo "项目目录不存在，正在创建：$PROJECT_DIR"
    mkdir -p "$PROJECT_DIR" > /dev/null 2>&1
fi

# 1.2 进入项目目录（失败直接提示退出，避免后续操作异常）
cd "$PROJECT_DIR" || { echo "❌ 错误：无法进入项目目录 $PROJECT_DIR，请检查路径权限！"; exit 1; }

# 1.3 初始化Git仓库（若未初始化，确保能拉取远程代码）
if [ ! -d ".git" ]; then
    echo "Git仓库未初始化，正在初始化本地仓库..."
    git init > /dev/null 2>&1
    echo "✅ Git仓库初始化完成"
else
    echo "Git仓库已存在，跳过初始化步骤"
fi

# ===================== 2. Git配置文件备份与修复（确保远程关联正常） =====================
echo -e "\n[2/7] 修复Git远程配置（确保能正常拉取远程代码）"

# 2.1 备份原Git配置（带时间戳，防止误操作可回滚）
if [ -f "$CONFIG_FILE" ]; then
    BACKUP_FILE="$CONFIG_FILE.backup.$(date +%Y%m%d%H%M%S)"
    cp "$CONFIG_FILE" "$BACKUP_FILE" > /dev/null 2>&1
    echo "✅ 原Git配置已备份到：$BACKUP_FILE"
else
    echo "原Git配置文件不存在，将创建全新配置"
fi

# 2.2 重写Git核心配置（固定远程仓库关联+分支绑定，确保拉取正常）
cat > "$CONFIG_FILE" << EOF
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = $REMOTE_REPO
	fetch = +refs/heads/$MAIN_BRANCH:refs/remotes/origin/$MAIN_BRANCH
[branch "$MAIN_BRANCH"]
	remote = origin
	merge = refs/heads/$MAIN_BRANCH
EOF

# 2.3 配置权限+验证配置有效性
chmod 644 "$CONFIG_FILE"
if [ $? -eq 0 ]; then
    echo "✅ Git配置修复成功！当前核心配置："
    echo "----------------------------------------"
    cat "$CONFIG_FILE" | grep -E "url|remote|merge"  # 只显示关键配置，清晰直观
    echo "----------------------------------------"
else
    echo "❌ 错误：Git配置文件写入失败，请检查目录权限！"
    exit 1
fi

# ===================== 3. 根治node_modules冲突（安装必做，避免拉取覆盖报错） =====================
echo -e "\n[3/7] 清理冲突源：删除本地残留node_modules目录（依赖将重新安装）"
if [ -d "node_modules" ]; then
    rm -rf node_modules > /dev/null 2>&1
    echo "✅ 本地残留node_modules目录已清理完成"
else
    echo "本地无残留node_modules目录，跳过清理步骤"
fi

# ===================== 4. 拉取远程最新代码（核心安装步骤，同步完整项目） =====================
echo -e "\n[4/7] 拉取远程 $MAIN_BRANCH 分支最新代码（同步完整项目文件）"
# 拉取时自动合并，若触发注释编辑器则自动保存退出（无需他人手动操作）
if git pull origin "$MAIN_BRANCH" --allow-unrelated-histories 2>&1 | grep -q "Please enter a commit message"; then
    # 自动输入保存退出命令，规避编辑器卡顿
    echo ":wq" | git pull origin "$MAIN_BRANCH" --allow-unrelated-histories > /dev/null 2>&1
    echo "✅ 拉取过程触发合并注释，已自动处理并完成拉取"
else
    echo "✅ 远程最新代码拉取完成（无冲突）"
fi

# ===================== 5. 配置.gitignore（永久规避后续冲突，适配所有使用者） =====================
echo -e "\n[5/7] 配置.gitignore文件（永久忽略冗余文件，避免后续冲突）"
# 写入通用且适配项目的忽略规则，重点规避依赖、日志、敏感文件
cat > "$GIT_IGNORE_FILE" << 'EOF'
# 核心冲突源：依赖包目录（必忽略，体积大且易冲突）
node_modules/
# 日志文件（本地生成，无需同步）
logs/
*.log
error.log
access.log
# 缓存文件（本地临时文件，同步无意义）
.cache/
.vscode/
.idea/
.tmp/
# 敏感文件：环境变量（含密钥/配置，禁止同步）
.env
.env.*
!.env.example  # 保留示例文件（若有）
# 构建产物（本地编译生成，无需同步）
dist/
build/
output/
dist.zip
# 系统临时文件（跨Windows/Mac/Linux兼容）
.DS_Store
Thumbs.db
# 包管理器锁文件（避免多人协作版本冲突，按需保留可注释）
package-lock.json
yarn.lock
pnpm-lock.yaml
# 自定义临时文件（适配项目可能生成的冗余文件）
temp/
downloads/
EOF
echo "✅ .gitignore文件配置完成，已永久忽略冲突风险文件"

# ===================== 6. 重新安装项目依赖（恢复项目运行能力，适配不同环境） =====================
echo -e "\n[6/7] 安装项目依赖（恢复项目正常运行能力）"
# 自动检测包管理器，优先npm其次yarn，无管理器则提示解决方案
if command -v npm &> /dev/null; then
    echo "检测到npm包管理器，开始安装依赖..."
    npm install > /dev/null 2>&1  # 静默安装，减少输出冗余
    echo "✅ 项目依赖安装完成（使用npm）"
elif command -v yarn &> /dev/null; then
    echo "检测到yarn包管理器，开始安装依赖..."
    yarn install > /dev/null 2>&1
    echo "✅ 项目依赖安装完成（使用yarn）"
else
    echo "⚠️  警告：未检测到npm/yarn包管理器，依赖安装跳过！"
    echo "⚠️  手动修复方案：执行 curl -fsSL https://deb.nodesource.com/setup_18.x | bash - 安装nodejs，再执行 npm install 完成依赖安装"
fi

# ===================== 7. 安装完成收尾提示 =====================
echo -e "\n========================================"
echo "🎉 XRK-Yunzai 项目安装修复脚本执行完成！"
echo "========================================"
echo "✅ 已完成功能："
echo "  1. Git配置修复+远程仓库关联"
echo "  2. node_modules冲突根治"
echo "  3. 远程最新代码同步"
echo "  4. .gitignore冲突规避配置"
echo "  5. 项目依赖自动安装"
echo -e "\n👉 后续操作："
echo "  1. 若依赖安装跳过，按提示安装nodejs后执行 npm install"
echo "  2. 直接启动项目即可正常运行（无需Git操作）"
echo "  3. 脚本无任何推送/提交逻辑，可放心分发给他人使用"
echo "========================================"
